def two_egg(T, M):
    """有T层楼，有M个鸡蛋，求最多要扔几次才能确定不会碎的那层
    我们假设在k层扔，如果碎了，我们去 func(k, M-1) 如果没碎我们去func(T-k, M)
    结果就是 max(func(k, M-1), func(T-k, M)) + 1

    使用动态规划来做，定义数组dp[T][n],T是楼层，n是鸡蛋

    边界条件 dp[T][1] 是 T
        dp[1][M]是1
    """
    def helper(k, m):
        """k是楼层，m是鸡蛋"""
        if k ==0 or m ==0:
            return 0
        if m == 1:
            return T
        if k == 1:
            return 1
        
        a = helper(k, m-1)
        b = helper(k-1, m-1)
        return min(a , b) + 1
        # memo[(k, m)] = a + b + 1

    return helper(T, M)

        


if __name__ == "__main__":
    print(two_egg(2, 10))